/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package multisistema.objetos;

import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.List;
import multisistema.db.MySQL;

/**
 *
 * @author EDONALDO01
 */
public class Transaccion {

    private int id;
    private String fecha_transaccion;
    private String descripcion;
    private String monto;
    private Miembro id_persona;
    private String operacion;
    private Usuario id_usuario;
    private String tipo;

    /**
     * @return the id
     */
    public int getId() {
        return id;
    }

    /**
     * @param id the id to set
     */
    public void setId(int id) {
        this.id = id;
    }

    /**
     * @return the fecha_transaccion
     */
    public String getFecha_transaccion() {
        return fecha_transaccion;
    }

    /**
     * @param fecha_transaccion the fecha_transaccion to set
     */
    public void setFecha_transaccion(String fecha_transaccion) {
        this.fecha_transaccion = fecha_transaccion;
    }

    /**
     * @return the descripcion
     */
    public String getDescripcion() {
        return descripcion;
    }

    /**
     * @param descripcion the descripcion to set
     */
    public void setDescripcion(String descripcion) {
        this.descripcion = descripcion;
    }

    /**
     * @return the monto_de_transaccion
     */
    public String getMonto_de_transaccion() {
        return monto;
    }

    /**
     * @param monto_de_transaccion the monto_de_transaccion to set
     */
    public void setMonto_de_transaccion(String monto_de_transaccion) {
        this.monto = monto_de_transaccion;
    }

    /**
     * @return the id_persona
     */
    public Miembro getId_persona() {
        return id_persona;
    }

    /**
     * @param id_persona the id_persona to set
     */
    public void setId_persona(Miembro id_persona) {
        this.id_persona = id_persona;
    }

    /**
     * @return the id_operacion
     */
    public String getId_operacion() {
        return operacion;
    }

    /**
     * @param id_operacion the id_operacion to set
     */
    public void setId_operacion(String id_operacion) {
        this.operacion = id_operacion;
    }

    /**
     * @return the id_usuario
     */
    public Usuario getId_usuario() {
        return id_usuario;
    }

    /**
     * @param id_usuario the id_usuario to set
     */
    public void setId_usuario(Usuario id_usuario) {
        this.id_usuario = id_usuario;
    }

    public static List<Transaccion> getTransacciones() {
        List<Transaccion> lista = new ArrayList<Transaccion>();
        Statement stmt = null;
        ResultSet rs = null;
        MySQL mydb = new MySQL();
        Connection conn = mydb.getConn();
        try {
            stmt = conn.createStatement();
            if (stmt.execute("SELECT * FROM `tbl_transacciones` ")) {
                rs = stmt.getResultSet();
            }

            while (rs.next()) {
                Transaccion usr = new Transaccion();
                usr.setId(rs.getInt("id_transaccion"));
                usr.setFecha_transaccion(rs.getString("fecha_transaccion"));
                usr.setDescripcion(rs.getString("descripcion"));
                usr.setTipo(rs.getString("tipo"));
                usr.setMonto_de_transaccion(rs.getString("monto"));
                usr.setId_operacion(rs.getString("operacion"));
                usr.setId_persona(new Miembro(rs.getInt("id_persona")));
                usr.setId_usuario(new Usuario(rs.getInt("id_usuario")));
                lista.add(usr);
            }
        } catch (SQLException ex) {
            System.out.println("SQLException: " + ex.getMessage());
            System.out.println("SQLState: " + ex.getSQLState());
            System.out.println("VendorError: " + ex.getErrorCode());
        } finally {
            if (rs != null) {
                try {
                    rs.close();
                } catch (SQLException sqlEx) {
                }
                rs = null;
            }
            if (stmt != null) {
                try {
                    stmt.close();
                } catch (SQLException sqlEx) {
                }
                stmt = null;
            }
        }
        try {
            conn.close();
        } catch (SQLException ex) {
            System.out.println("SQLException: " + ex.getMessage());
            System.out.println("SQLState: " + ex.getSQLState());
            System.out.println("VendorError: " + ex.getErrorCode());
        }
        return lista;
    }

    public void eliminar() {
        Statement stmt = null;
        ResultSet rs = null;
        MySQL mydb = new MySQL();
        Connection conn = mydb.getConn();
        try {
            stmt = conn.createStatement();
            stmt.executeUpdate("DELETE FROM `multisistema`.`tbl_transacciones` WHERE `tbl_transacciones`.`id_transaccion` = " + this.getId() + ";");
        } catch (SQLException ex) {
            System.out.println("SQLException: " + ex.getMessage());
            System.out.println("SQLState: " + ex.getSQLState());
            System.out.println("VendorError: " + ex.getErrorCode());
        } finally {

            if (rs != null) {
                try {
                    rs.close();
                } catch (SQLException ex) {
                    // ignore
                }
            }

            if (stmt != null) {
                try {
                    stmt.close();
                } catch (SQLException ex) {
                    // ignore
                }
            }
        }
    }

    public void agregar() {
        Statement stmt = null;
        ResultSet rs = null;
        MySQL mydb = new MySQL();
        Connection conn = mydb.getConn();
        try {
            stmt = conn.createStatement();
            stmt.executeUpdate("INSERT INTO `multisistema`.`tbl_transacciones` "
                    + "(`id_transaccion`, `tipo`, `fecha_transaccion`, `descripcion`, `monto`,`operacion`, `id_persona`, `id_usuario`)"
                    + " VALUES (NULL, '" + this.getTipo() + "', '" + this.getFecha_transaccion() + "', '" + this.getDescripcion() + "', '" + this.getMonto_de_transaccion() + "', '" + this.getId_operacion() + "', " + this.getId_persona().getId() + ", " + this.getId_usuario().getId()
                    + ");");

            rs = stmt.executeQuery("SELECT LAST_INSERT_ID()");
            if (rs.next()) {
                this.setId(rs.getInt(1));
            }
        } catch (SQLException ex) {
            System.out.println("SQLException: " + ex.getMessage());
            System.out.println("SQLState: " + ex.getSQLState());
            System.out.println("VendorError: " + ex.getErrorCode());
        } finally {

            if (rs != null) {
                try {
                    rs.close();
                } catch (SQLException ex) {
                    // ignore
                }
            }

            if (stmt != null) {
                try {
                    stmt.close();
                } catch (SQLException ex) {
                    // ignore
                }
            }
        }
    }

    public void modificar() {
        Statement stmt = null;
        ResultSet rs = null;
        MySQL mydb = new MySQL();
        Connection conn = mydb.getConn();
        try {
            stmt = conn.createStatement();
            stmt.executeUpdate("UPDATE `multisistema`.`tbl_transacciones` SET "
                    + "`fecha_transaccion` = '" + this.getFecha_transaccion()
                    + "', `descripcion` = '" + this.getDescripcion()
                    + "', `tipo` = '" + this.getTipo()
                    + "', `monto` = '" + this.getMonto_de_transaccion()
                    + "', `operacion` = '" + this.getId_operacion()
                    + "', `id_persona` = '" + this.getId_persona().getId()
                    + "', `id_usuario` = '" + this.getId_usuario().getId()
                    + "' WHERE `id_transaccion` = '" + this.getId()
                    + "';");

            rs = stmt.executeQuery("SELECT LAST_INSERT_ID()");
            if (rs.next()) {
                this.setId(rs.getInt(1));
            }
        } catch (SQLException ex) {
            System.out.println("SQLException: " + ex.getMessage());
            System.out.println("SQLState: " + ex.getSQLState());
            System.out.println("VendorError: " + ex.getErrorCode());
        } finally {

            if (rs != null) {
                try {
                    rs.close();
                } catch (SQLException ex) {
                    // ignore
                }
            }

            if (stmt != null) {
                try {
                    stmt.close();
                } catch (SQLException ex) {
                    // ignore
                }
            }
        }
    }

    /**
     * @return the tipo
     */
    public String getTipo() {
        return tipo;
    }

    /**
     * @param tipo the tipo to set
     */
    public void setTipo(String tipo) {
        this.tipo = tipo;
    }
    
    public static List<Transaccion> buscar(String campo, String valor) {
        List<Transaccion> lista = new ArrayList<Transaccion>();
        Statement stmt = null;
        ResultSet rs = null;
        MySQL mydb = new MySQL();
        Connection conn = mydb.getConn();
        if (campo.equals("nombre_persona")) {
            List<Miembro> m = Miembro.buscar("nombre_persona", valor);
            campo = "id_persona";
            if(!m.isEmpty())
            valor =  m.get(0).getId() + "";
        }
        try {
            stmt = conn.createStatement();
            if (stmt.execute("SELECT * FROM `tbl_transacciones` WHERE `" + campo + "` LIKE '%" + valor + "%';")) {
                rs = stmt.getResultSet();
            }

            while (rs.next()) {
                Transaccion usr = new Transaccion();
                usr.setId(rs.getInt("id_transaccion"));
                usr.setFecha_transaccion(rs.getString("fecha_transaccion"));
                usr.setDescripcion(rs.getString("descripcion"));
                usr.setTipo(rs.getString("tipo"));
                usr.setMonto_de_transaccion(rs.getString("monto"));
                usr.setId_operacion(rs.getString("operacion"));
                usr.setId_persona(new Miembro(rs.getInt("id_persona")));
                usr.setId_usuario(new Usuario(rs.getInt("id_usuario")));
                lista.add(usr);
            }
        } catch (SQLException ex) {
            System.out.println("SQLException: " + ex.getMessage());
            System.out.println("SQLState: " + ex.getSQLState());
            System.out.println("VendorError: " + ex.getErrorCode());
        } finally {
            if (rs != null) {
                try {
                    rs.close();
                } catch (SQLException sqlEx) {
                }
                rs = null;
            }
            if (stmt != null) {
                try {
                    stmt.close();
                } catch (SQLException sqlEx) {
                }
                stmt = null;
            }
        }
        try {
            conn.close();
        } catch (SQLException ex) {
            System.out.println("SQLException: " + ex.getMessage());
            System.out.println("SQLState: " + ex.getSQLState());
            System.out.println("VendorError: " + ex.getErrorCode());
        }
        return lista;
    }
}
